/*{
    //ES5 中的类
    /!*function A(x) {
        this.x = x;
    }
    A.prototype.getX = function(){
        console.log(this.x);
    };*!/

    //ES6中的类

    // A();//Class constructor A cannot be invoked without 'new'
    //ES6中 基础CLASS创造出来的类是不能当作普通函数执行的

    class A {
        constructor(x){//私有的属性和方法;
            this.x = x
        }
        // name: "aa",
        getX(){//公有的方法
            console.log(this.x)
        }
    }
    /!*A.prototype.getX = function () {//公有的方法
        console.log(this.x);
    };
    A.prototype.name = "aa"; //公有的属性*!/

    class B {
        constructor(y){
            // A.call(this, 200); //Class constructor A cannot be invoked without 'new'
            this.y = y
        }
        getY(){
            console.log(this.y)
        }
    }
    // B.prototype = Object.create(A.prototype); //ES6中的类 是不允许重定向原型的

    let b1 = new B(200);
    console.log(b1);
}*/

{//ES6中的继承
    //class CHILD extends PARENT{}
    //=> B.prototype.__proto__ = A.prototype

    class A {
        constructor(x){
            this.x = x
        }
        getX(){//公有的方法
            console.log(this.x)
        }
    }
    class B extends A{
        //如果不写constructor, js在执行的时候会自动的帮我们创建一个constructor;
        //js创建的constructor类似下方代码
        // constructor(...args){
        //     super(...args)
        // }
        constructor(y){
            super(200);
            //如果不写super();
            //报错: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
            //super内部实现原理---> A.call(this, 200);
            this.y = y
        }
        getY(){
            console.log(this.y)
        }
    }
    let b1 = new B(100);
    console.log(b1);
}





//Promise.prototype.then catch finally ..
/*class Dialog extends Promise{
    constructor(){
        super()
    }
    show(){
        this.then()
    }
    hide(){

        this.then()
    }
}*/

/*class Utils {//工具类
    // 防抖函数
}

class Dialog {
    // (new Utils()).防抖函数
}
class Dialog extends Utils{
    // this.防抖函数
}*/





